package com.foreknow.demo27;

/**
 * 多线程：它是指从软件或硬件上实现多个线程并发执行的一种技术。
 * 线程(Thread)：在一个程序中，独立运行的程序片段叫作线程。
 *
 * 线程的状态和生命周期
 *
 * 操作系统中会有进程的概念，就是同一时间可以在计算机中同时运行多个程序。在一个进程中又包含多个同时执行
 * 的任务，这些任务就可以称为线程。
 *
 * 单核的cpu在同一时间只能执行一个进程跌一个线程.
 * 一个线程中的代码在执行的过程中会有如下状态
 * 1.开始状态 start
 * 2.就绪状态
 * 3.运行状态
 * 4.死亡状态 stop
 * 5.阻塞状态
 * 6.等待状态
 *
 * 在Java中如何实现多线程（两种方式）
 * 1. 实现java.lang.Runnable接口，并实现它的run方法
 *          public class MyThreaddd1 implements Runnable
 * 2. 继承java.lang.Thread类，并重写它的run方法
 *          public class MyThread2 extends Thread
 *
 */

public class Test {
    public static void main(String[] args) {
        //如果地直接通过调用调用run方法执行程序，相当于顺序执行，不是多线程的方式
        MyThread1 myThread1 = new MyThread1(); //runnable
        MyThread2 myThread2 = new MyThread2(); //thread
//    myThread1.run();//这是方法的调用，不是多线程
//    myThread2.run();

        //启动多线程的方式执行程序一定要通过Thread类中的start方法来启动
        //1.通过继承Thread类实现的线程对象，可以直接调用自身的start方法
        //2.通过实现Runnable接口实现的线程对象，自身没有start方法，一定通过另一个Thread类对象加载
        //自己后，使用Thread对象提供的start方法启动

        Thread t1 = new Thread(myThread1);
        t1.start();//启动线程

        myThread2.start();

        //每次执行的结果都是不一样的，因为两个线程对象在竞争CPU的时间片，谁抢到了谁执行，所以可以看做两个对象在同时运行的效果

    }
}
